package com.gf.framework.redis.annotation;

import com.gf.framework.redis.core.LockModel;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * @author gaofei
 * @Description RedissionLock 锁
 * @create 2022/5/24 14:43
 */
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target(ElementType.METHOD)
public @interface RedissonLock {
    /**
     * 锁的模式:如果不设置,自动模式,当参数只有一个.使用 REENTRANT 参数多个 MULTIPLE
     */
    LockModel lockModel() default LockModel.AUTO;

    /**
     * value， 默认值为方法名，也可以手动设置
     * @return
     */
    String value() default "";

    /**
     * 支持SpEL表达式
     * @return
     */
    String[] lockKey() default {};

    /**
     * 尝试获取锁的时间，默认3秒
     * @return
     */
    long expireTime() default 3000L;

    /**
     * 等待加锁超时时间,默认10000毫秒 -1 则表示一直等待
     * @return int
     */
    long waitTime() default 10000L;
}
